package leetco.test.union;

import org.junit.Test;

/**
 * 某地有一块很长的空地，一部分作为停车位已出租，另一部分没有。如果新申请停车位，
 * 要求不能和现有的停车位相邻，如果现在用一个数组表示这块空地，其中包含数字0和1，
 * 没有作为停车位出租为0，作为停车位已出租为1，输入一个数字n表示新申请的停车位总量，
 * 判断是否成功
 * <p>
 * 输入：[0,0,1,0,1,0,0,1],1
 * 输出：true
 * 说明：可以放在第一个位置，下标为0
 */
public class Park {


    @Test
    public void tester() {
        int[] parks = {0, 0, 0, 0, 1, 0, 1, 0, 0, 1};
        System.out.println(isPark(parks, 2));
    }

    public boolean isPark(int[] parks, int num) {
        // 假设靠墙还有一个空车位
        int[] park = new int[parks.length + 1];
        System.arraycopy(parks, 0, park, 1, parks.length);
        // 本次可停车数量
        int tmpConfirm = 0;
        int confirm = 0;
        // 连续空车位数量
        int empty = 0;
        for (int value : park) {
            if (value == 1) {
                // 可停车数 = （连续空车位数量 -1） / 2
                tmpConfirm = empty > 0 ? (empty - 1) / 2 : 0;
                confirm = confirm + tmpConfirm;
                empty = 0;
            } else {
                empty++;
            }
        }

        return confirm >= num;
    }

}
